package br.edu.infnet.avaliacao.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import br.edu.infnet.avaliacao.dao.UsuarioDAO;
import br.edu.infnet.avaliacao.dao.UsuarioHibernateDAO;
import br.edu.infnet.avaliacao.modelo.Usuario;

@ManagedBean
@RequestScoped
public class UsuarioMB {

	private Usuario usuario = new Usuario();
		
	private UsuarioDAO dao = new UsuarioHibernateDAO();

	private Usuario usuarioRetorno = new Usuario();

	private List<Usuario> lista = new ArrayList<>();

	private List<Usuario> autoComplete = new ArrayList<>();

	public UsuarioMB() {
		usuario = new Usuario();
		usuarioRetorno = new Usuario();
	}
	public void atualizar() {
		dao.atualizar(usuario);
		usuarioRetorno = usuario;
		listar();
	}

	public List<Usuario> completeUsuario(String query) {
		List<Usuario> suggestions = new ArrayList<>();
		autoComplete = dao.listar();
		for (Usuario f : autoComplete) {
			if (f.getNome().startsWith(query))
				suggestions.add(f);
		}

		return suggestions;
	}

	public void consultar() {
		dao.consultar(usuarioRetorno.getId());
	}

	public void deletar() {
		dao.excluir(usuario.getId());		
		listar();
	}

	public List<Usuario> getAutoComplete() {
		if (autoComplete == null) {
			autoComplete = dao.listar();
		}
		return autoComplete;
	}

	public UsuarioDAO getDao() {
		return dao;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public Usuario getUsuarioRetorno() {
		return usuarioRetorno;
	}

	public List<Usuario> getLista() {
		return lista;
	}

	public void listar() {
		lista = dao.listar();
		usuario = new Usuario();
	}

	public void salvar() {
		dao.inserir(usuario);
		listar();
	}

	public void setAutoComplete(List<Usuario> autoComplete) {
		this.autoComplete = autoComplete;
	}

	public void setDao(UsuarioDAO dao) {
		this.dao = dao;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public void setUsuarioRetorno(Usuario usuarioRetorno) {
		this.usuarioRetorno = usuarioRetorno;
	}

	public void setLista(List<Usuario> lista) {
		this.lista = lista;
	}
}